package engine.control
{
	/**
	 * 功能：管理NxTable的翻页功能。
	 * 可动态改变要管理的NxTable。
	 * @author guyi
	 * 
	 */
	import flash.events.MouseEvent;
	
	import newx.com.control.button.NxButton;
	import newx.com.control.table.NxTable;
	import newx.com.control.text.NxLabel;

	public class NxTablePageTurner
	{
		private var _preBtn:NxButton;
		private var _nextBtn:NxButton;
		private var _targetTable:NxTable;
		private var _displayLabel:NxLabel;
		
		private var _beforeTurn:Function;
		private var _afterTurn:Function;
		/**
		 * @preBtn:NxButton,向前翻页按钮
		 * @nextBtn：NxButton，向后翻页按钮
		 * @targetTable：NxButton，目标翻页对象
	 	 * @displayLabel:NxLabel,显示页码信息的标签文本
	 	 * @beforeTurn：Function，翻页前回调函数，无参数
	 	 * @afterTurn：Function，翻页后回调函数，无参数
		`*/
		public function NxTablePageTurner(preBtn:NxButton,nextBtn:NxButton,targetTable:NxTable,displayLabel:NxLabel=null,beforeTurn:Function=null,afterTurn:Function=null)
		{
				this._preBtn=preBtn;
				this._nextBtn=nextBtn;
				this._targetTable=targetTable;
				this._displayLabel=displayLabel;
				
				this._beforeTurn=beforeTurn;
				this._afterTurn=afterTurn;
		}
		/**
		 * 添加翻页事件侦听
		 * 通常我不希望自己被构造后就开始侦听(隐藏、不活动等)，只有在需要时才开始。
		 * 
		 */
		public function addEventListener():void{
			_preBtn.addEventListener(MouseEvent.CLICK,onPagePre);
			_nextBtn.addEventListener(MouseEvent.CLICK,onPageNext);
			onPageDis();
		}
		/**
		 * @protected
		 *向上翻一页 
		 */		
		protected function onPagePre(e:MouseEvent=null):void
		{
			_targetTable			.currentPage--;
			
			onPageDis();
		}
		
		/**
		 * @protected
		 *向下翻一页 
		 */		
		protected function onPageNext(e:MouseEvent=null):void
		{
			
			_targetTable			.currentPage++;
			
			onPageDis();
		}
		/**
		 * 显示NxTable 页码信息
		 * _beforeTurn()回调函数，翻页前通常需要清空下上页选中的Nxtable信息或其他。
		 * 需不需要默认将信息修改为新页的第一条？
		 */
		
		public function onPageDis():void
		{			
			if(_beforeTurn!=null) _beforeTurn();//若存在则调用
			
			_preBtn.enabled 	= false;
			_nextBtn.enabled 	= false;
			
			if(_targetTable.totalPage - 1 > _targetTable.currentPage)
			{
				_nextBtn.enabled = true
			}
			
			if(_targetTable.currentPage > 0)
			{
				_preBtn.enabled = true;
			}
			//若存在 
			var pageCurrtStr:String;
			var pageTableStr:String;
			
			if(_displayLabel){
				
				pageCurrtStr	=	String(_targetTable.currentPage +1);
				
				if(_targetTable.totalPage == 0){
					pageTableStr	=	String(_targetTable.totalPage +1);
				}else{
					pageTableStr	=	String(_targetTable.totalPage);
				}
					
				_displayLabel.htmlText	=	pageCurrtStr+"/"+pageTableStr;
			}
			if(_afterTurn!=null) _afterTurn();//若存在则调用
		}
		/**
		 *移除所有侦听事件，销毁对象时需调用此函数以防止内存泄露。
		 *  
		 */
		public function removeEventListener():void{
			
			_preBtn.removeEventListener(MouseEvent.CLICK,onPagePre);
			_nextBtn.removeEventListener(MouseEvent.CLICK,onPageNext);
		}
		
		/**
		 * 公开目标NxTable:_targetTable
		 * 通常用于配合NxTab选项卡使用，可以动态改变需要翻页的目标，并显示对应的页码信息
		 */
		public function get targetTable():NxTable{
			return	this._targetTable;
		}
		public function set targetTable(table:NxTable):void{
			this._targetTable=table;
			this.onPageDis();//目标表格改变时重新显示页码。
		}
		
	}
}